package com.qingcloud.adminbackend.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qingcloud.adminbackend.entity.role.MiniRole;
import com.qingcloud.adminbackend.entity.user.*;
import com.qingcloud.adminbackend.entity.userdomain.UserDomainDTO;
import com.qingcloud.base.remote.pojo.LoginUserDTO;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 * <p>
 * Mapper 接口
 * </p>
 *
 * @author luozehua
 * @since 2018-11-19
 */
public interface SysUserMapper extends BaseMapper<SysUser> {

    List<String> findOrgIdByUserId(@Param("userIds") List<String> userIds);

    /**
     * 根据用户Id获取用户信息
     *
     * @param userId
     * @return
     */
    SysUser getUserDetails(@Param("userId") String userId);

    /**
     * 根据用户Id获取用户身份
     *
     * @param userId
     * @return
     */
    List<String> getUserRole(@Param("userId") String userId);

    /**
     * 根据用户Id获取用户身份Id
     *
     * @param userId
     * @return
     */
    List<String> getUserRoleId(@Param("userId") String userId);

    /**
     * 根据用户Id获取关联客户
     *
     * @param userId
     * @return
     */
    List<String> getUserOrg(@Param("userId") String userId);

    /**
     * 根据用户Id获取关联客户的业务类型
     *
     * @param userId
     * @return
     */
    String getUserOrgBusinessType(@Param("userId") String userId);

    /**
     * 更新健康空气用户
     *
     * @param sysUser
     * @return
     */
    Integer updateAirUser(@Param("sysUser") SysUser sysUser);

    IPage<AirUserVO> findPageAirUser(Page<AirUserBo> page, @Param("sysUser") AirUserBo sysUser,
                                     @Param("userIds") List<String> ids,
                                     @Param("isAdmin") String isAdmin,
                                     @Param("adminFlag") String adminFlag);
    /**
     * 根据ID查询用户
     *
     * @param orgIds
     * @return
     */
    List<SysUser> findUserByOrgIds(@Param("orgIds") List<String> orgIds, @Param("roleId") String roleName);

    List<SysUser> findUserByIds(@Param("ids") List<String> ids);

    LoginUserDTO getUserByName(@Param("userName") String userName);

    List<SysUserVo> findUserByOrgId(@Param("orgIds") List<String> orgIds);

    /**
     * 根据用户ID修改用户密码
     */
    int updatePasswordById(@Param("userId") String userId, @Param("password") String password);

    /**
     * 根据名称和登录名模糊查询用户ID
     *
     * @param operator
     * @return
     */
    List<String> findIdLikeName(@Param("operator") String operator);

    Integer updateCrawlerAuthAndPoolAuth(@Param("userId") String userId,
                                         @Param("crawlerAuth") Integer crawlerAuth,
                                         @Param("equipmentPoolAuth") Integer equipmentPoolAuth);


    List<MiniRole> getAllRoles(@Param("userId") String userId);

    /**
     * 按照登录名和姓名模糊查询所有用户
     *
     * @param name 模糊查询的名称
     * @return 用户列表
     */
    List<SimpleUserDTO> findUserLike(@Param("name") String name);

    /**
     * 通过用户ID列表批量查询用户信息
     *
     * @param idList 用户ID列表
     * @return 用户信息列表
     */
    List<SimpleUserDTO> findByIdList(@Param("idList") Collection<String> idList);

    /**
     * 查询客户下的用户信息
     *
     * @return
     */
    List<SimpleUserDTO> findSimpleInfoByOrgId(@Param("orgId") String orgId);

    /**
     * 登录更新用户最后登录时间和登录次数
     */
    int updateLoginInfo(@Param("userName") String userName);

    int updateLoginInfoById(@Param("userId") String userId);

    /**
     * 通过用户账号列表批量查询用户信息
     *
     * @param userNameList 用户账号列表
     * @return 用户信息列表
     */
    List<SimpleUserDTO> findByUsernameList(@Param("userNameList") Collection<String> userNameList);

    /**
     * 查询登陆成功用户信息
     *
     * @param userId 用户ID
     * @return
     */
    LoginUserDTO findLoginUserInfo(@Param("userId") String userId);

    /**
     * 查询用户身份信息
     *
     * @param userId
     * @return
     */
    UserFlagDTO findUserFlag(@Param("userId") String userId);

    /**
     * 查询网格员用户
     *
     * @param domainId 区域ID
     * @param orgIds   任务管理权限组织ID
     * @param isAdmin  是否管理员
     * @return
     */
    List<GridUserDTO> findGridUser(@Param("domainId") Integer domainId, @Param("orgIds") Set<String> orgIds,
                                   @Param("isAdmin") boolean isAdmin);

    /**
     * 查询用户分配的区域信息
     *
     * @param userId
     * @return
     */
    List<UserDomainDTO> findUserDomains(@Param("userId") String userId);

    void updateUserBassic(@Param("entity") SysUser entity);

    /**
     * 删除 sys_user_info 表
     */
    void delUserInfo(@Param("userId") String userId);

    /**
     * 保存 sys_user_info 表数据
     */
    void saveUserInfo(@Param("info") SysUserInfo info);

    /**
     * 删除 sys_user_domain 表
     * @param userId
     */
    void delUserDomain(@Param("userId") String userId);

    /**
     * 新增 sys_user_domain 数据
     */
    void saveUserDomain(@Param("list") List<SysUserDomain> list);

    SysUserInfo selectUserInfoByUserId(@Param("userId") String userId);

    List<SysUserDomain> selectUserDomainByUserId(@Param("userId") String userId);

    void updateUserAvatar(@Param("userId") String userId, @Param("avatar") String avatar);
}
